<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>测试 Promise.any</title>
</head>
<body>
  <h1>Promise.any 测试</h1>
  <script src="MyPromise.js"></script>
  <script>
    console.log('========== 测试1：有一个成功 ==========');
    MyPromise.any([
      MyPromise.reject('错误1'),
      MyPromise.resolve('成功了！'),
      MyPromise.reject('错误2')
    ]).then(
      result => console.log('✅ 成功:', result),
      error => console.log('❌ 失败:', error)
    );
    // 预期输出：✅ 成功: 成功了！

    console.log('\n========== 测试2：全部失败 ==========');
    MyPromise.any([
      MyPromise.reject('错误1'),
      MyPromise.reject('错误2'),
      MyPromise.reject('错误3')
    ]).then(
      result => console.log('✅ 成功:', result),
      error => {
        console.log('❌ 失败:', error.message);
        console.log('所有错误:', error.errors);
      }
    );
    // 预期输出：❌ 失败: All promises were rejected
    //         所有错误: ['错误1', '错误2', '错误3']

    console.log('\n========== 测试3：第一个成功 ==========');
    MyPromise.any([
      MyPromise.resolve('第一个成功'),
      MyPromise.resolve('第二个成功'),
      MyPromise.reject('错误')
    ]).then(
      result => console.log('✅ 成功:', result),
      error => console.log('❌ 失败:', error)
    );
    // 预期输出：✅ 成功: 第一个成功

    console.log('\n========== 测试4：异步任务 ==========');
    MyPromise.any([
      new MyPromise((resolve, reject) => {
        setTimeout(() => reject('慢的失败'), 2000);
      }),
      new MyPromise((resolve, reject) => {
        setTimeout(() => resolve('快的成功'), 1000);
      }),
      new MyPromise((resolve, reject) => {
        setTimeout(() => reject('更快的失败'), 500);
      })
    ]).then(
      result => console.log('✅ 成功:', result),
      error => console.log('❌ 失败:', error)
    );
    // 预期输出（1秒后）：✅ 成功: 快的成功

    console.log('\n========== 测试5：空数组 ==========');
    MyPromise.any([]).then(
      result => console.log('✅ 成功:', result),
      error => {
        console.log('❌ 失败:', error.message);
        console.log('错误数组:', error.errors);
      }
    );
    // 预期输出：❌ 失败: All promises were rejected
    //         错误数组: []

    console.log('\n========== 测试6：实际场景 - 多服务器请求 ==========');
    // 模拟向多个服务器请求数据，只要有一个成功就行
    function fetchFromServer(serverName, delay, shouldFail) {
      return new MyPromise((resolve, reject) => {
        setTimeout(() => {
          if (shouldFail) {
            reject(`${serverName} 请求失败`);
          } else {
            resolve(`从 ${serverName} 获取的数据`);
          }
        }, delay);
      });
    }

    MyPromise.any([
      fetchFromServer('服务器A', 2000, true),  // 2秒后失败
      fetchFromServer('服务器B', 1500, false), // 1.5秒后成功
      fetchFromServer('服务器C', 1000, true)   // 1秒后失败
    ]).then(
      data => console.log('✅ 获取数据成功:', data),
      error => {
        console.log('❌ 所有服务器都失败了');
        console.log('失败原因:', error.errors);
      }
    );
    // 预期输出（1.5秒后）：✅ 获取数据成功: 从 服务器B 获取的数据

    console.log('\n========== 测试7：与原生Promise.any对比 ==========');
    // 如果浏览器支持原生Promise.any，可以对比结果
    if (Promise.any) {
      Promise.any([
        Promise.reject('原生错误1'),
        Promise.resolve('原生成功'),
        Promise.reject('原生错误2')
      ]).then(
        result => console.log('原生Promise.any 成功:', result),
        error => console.log('原生Promise.any 失败:', error)
      );
    } else {
      console.log('浏览器不支持原生 Promise.any');
    }
  </script>
</body>
</html>

